home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 151-175 / scopedisk168 / tinytools / include / init.i < prev    next >
Text File  |  1995-03-19  |  5KB  |  217 lines

  1. ; The stuff below is some pretty basic support and initialization, and
  2. ; should be replaced easily with the includes and macros used in your
  3. ; assembly system. I don't think you'll encounter many problems when
  4. ; trying to assemble this.
  5.  
  6.        OPT     A-,M-,O+,O3-,OW-,I+,P+,S-,T+,W+,D-,X-
  7.  
  8. ; Define global variable structure pointer
  9.  
  10. GP     EQUR    A5
  11.  
  12. ; Equs private to initialization code
  13.  
  14. InitError      EQU     100
  15. NormError      EQU     20
  16.  
  17. ; Some LVOs & equates (can be gotten by including dos*.i & arpbase.i etc.)
  18.  
  19. _LVOArpAlloc   EQU     -384
  20. _LVOArpAllocMem        EQU     -390
  21. _LVOArpLock    EQU     -408
  22. _LVOArpOpen    EQU     -396
  23. _LVOAtol       EQU     -258
  24. _LVOCheckAbort EQU     -270
  25. _LVOClose      EQU     -36
  26. _LVOCloseDevice        EQU     -450
  27. _LVOCloseLibrary EQU   -414
  28. _LVODoIO       EQU     -456
  29. _LVODelay      EQU     -198
  30. _LVODeleteFile EQU     -72
  31. _LVOExamine    EQU     -102
  32. _LVOForbid     EQU     -132
  33. _LVOFindPort   EQU     -390
  34. _LVOFindTask   EQU     -294
  35. _LVOGADS       EQU     -252
  36. _LVOInput      EQU     -54
  37. _LVOLock       EQU     -84
  38. _LVOOpen       EQU     -30
  39. _LVOOpenDevice EQU     -444
  40. _LVOOpenLibrary        EQU     -552
  41. _LVOOpenWorkBench EQU  -210
  42. _LVOOutput     EQU     -60
  43. _LVOPermit     EQU     -138
  44. _LVOPuts       EQU     -240
  45. _LVORawDoFmt   EQU     -522
  46. _LVORead       EQU     -42
  47. _LVOSeek       EQU     -66
  48. _LVOSetProtection EQU  -186
  49. _LVOStamptoStr EQU     -564
  50. _LVOStrcmp     EQU     -522
  51. _LVOUnLock     EQU     -90
  52. _LVOWBenchToFront EQU  -342
  53. _LVOWrite      EQU     -48
  54.  
  55. ACCESS_READ    EQU     -2
  56. ACCESS_WRITE   EQU     -1
  57. ArpVersion     EQU     39
  58. ds_Days                EQU     0
  59. ds_Minute      EQU     4
  60. ds_Tick                EQU     8
  61. fib_DateStamp  EQU     $84
  62. fib_SIZEOF     EQU     $104
  63. FORMAT_DOS     EQU     0
  64. IO_COMMAND     EQU     $1C
  65. IOTV_SIZE      EQU     $28
  66. IOTV_TIME      EQU     $20
  67. LEN_DATSTRING  EQU     10
  68. LN_NAME                EQU     $A
  69. MEMF_CLEAR     EQU     $10000
  70. MEMF_PUBLIC    EQU     1
  71. MN_REPLYPORT   EQU     $E
  72. MODE_NEWFILE   EQU     $3EE
  73. MODE_OLDFILE   EQU     $3ED
  74. OFFSET_END     EQU     1
  75. pr_MsgPort     EQU     $5C
  76. pr_WindowPtr   EQU     $B8
  77. RESIDENT_MAGIC EQU     $4AFC
  78. ThisTask       EQU     $114
  79. TR_SETSYSTIME  EQU     $B
  80. TV_SECS                EQU     0
  81.  
  82. ; Negative structure building macros
  83.  
  84. ALIGN  MACRO
  85. soff   SET     soff-(soff&1)
  86.        ENDM
  87.  
  88. STRUCT MACRO
  89. soff   SET     soff-\2
  90.        ALIGN
  91. \1     EQU     soff
  92.        ENDM
  93.  
  94. LONG   MACRO
  95.        ALIGN
  96. soff   SET     soff-4
  97. \1     EQU     soff
  98.        ENDM
  99.  
  100. WORD   MACRO
  101.        ALIGN
  102. soff   SET     soff-2
  103. \1     EQU     soff
  104.        ENDM
  105.  
  106. BYTE   MACRO
  107. soff   SET     soff-1
  108. \1     EQU     soff
  109.        ENDM
  110.  
  111. SIZE   MACRO
  112.        ALIGN
  113. StrcSize EQU   soff
  114.        ENDM
  115.  
  116. ; Define default variables.
  117.  
  118. soff   SET     0
  119.        LONG    ComLineBase
  120.        LONG    ComLineSize
  121.        WORD    ReturnCode
  122.  
  123. ; This requires A6 to be set properly! Keep track carefully or reload A6
  124.  
  125. CALL   MACRO
  126.        JSR     _LVO\1(A6)
  127.        ENDM
  128.  
  129. ; This tells ARP's shell and resident how large a stack we require.
  130.  
  131. STACK  MACRO
  132.        BRA.S   ResStart
  133.        DC.W    RESIDENT_MAGIC
  134.        DC.L    \1
  135.        DC.L    0
  136. ResStart:
  137.        ENDM
  138.  
  139. ; The big one.
  140.  
  141. INIT   MACRO
  142.  
  143. ; Setup the stack structure (on stack for reentrability) (GP=A5, do not modify)
  144.  
  145.        LINK    GP,#StrcSize
  146.        MOVE.L  SP,A1
  147. ClearStackStruct:
  148.        CLR.W   (A1)+
  149.        CMP.L   A1,GP
  150.        BNE     ClearStackStruct
  151.  
  152. ; Initialize default variables
  153.  
  154.        MOVE.W  #InitError,ReturnCode(GP)
  155.        MOVE.L  A0,ComLineBase(GP)
  156.        MOVE.L  D0,ComLineSize(GP)
  157.  
  158. ; Try to open ARP
  159.  
  160.        MOVE.L  $4.W,A6
  161.        LEA     ArpName(PC),A1
  162.        MOVEQ   #ArpVersion,D0
  163.        CALL    OpenLibrary
  164.        TST.L   D0
  165.        BNE.S   OpenedOK
  166.  
  167. ; Report that the ARP library could not be opened.
  168.  
  169. ;      MOVEQ   #0,D0           ; Already 0
  170.        LEA     DosName(PC),A1
  171.        CALL    OpenLibrary
  172.        TST.L   D0
  173.        BEQ.S   ThisIsHorrible
  174.        MOVE.L  D0,A6
  175.        CALL    Output
  176.        MOVE.L  D0,D1
  177.        BEQ.S   BackToDOS
  178.        LEA     LibErr(PC),A0
  179.        MOVE.L  A0,D2
  180.        MOVEQ   #StringEnd-LibErr,D3
  181.        CALL    Write
  182.  
  183. ; Return to DOS
  184.  
  185. BackToDOS:
  186.        MOVE.L  A6,A1
  187.        MOVE.L  $4.W,A6
  188.        CALL    CloseLibrary
  189. ThisIsHorrible:
  190.        MOVE.W  ReturnCode(GP),D0
  191.        EXT.W   D0
  192.        UNLK    GP
  193.        RTS
  194.  
  195. ; Support strings
  196.  
  197.        IFGE    ArpVersion-100
  198.        FAIL "Version > 3 digits"
  199.        ENDC
  200.  
  201. TMP      SET   ArpVersion/10
  202. DosName          DC.B  'dos.library',0
  203. LibErr   DC.B  'you need '
  204. ArpName          DC.B  'arp.library',0,' V',TMP+'0',(ArpVersion-(TMP*10))+'0','+',10
  205. StringEnd:
  206.        CNOP    0,2
  207.  
  208. ; A6 = ARP base (Do not modify A6 if you use CALL), lower error level, call user.
  209.  
  210. OpenedOK:
  211.        MOVE.L  D0,A6
  212.        MOVE.W  #NormError,ReturnCode(GP)
  213.        BSR.S   UserCode
  214.        BRA     BackToDOS
  215. UserCode:
  216.        ENDM
  217.